import calendar
import datetime
import random

from flask import Blueprint, current_app, make_response
from flask_cors import cross_origin
from flask import request

from app.Services.AdminServices.UserServices.UserServices import UserServices
from app.Utils.Utils import success_response, error_response, return_response_

# 1. 创建蓝图对象
user_bp = Blueprint(
    name='user_bp',
    import_name=__name__,
    url_prefix='/user'
)
user_services = UserServices()


# 登录
@user_bp.route('/login', methods=['GET', 'POST'])
def login():
    username: str = request.json.get('username', None)
    password: str = request.json.get('password', None)
    status, res = user_services.user_login(username, password)
    # 4. 登录成功 → 设置 Cookie（user_id）
    if status:
        # 假设 user_services.user_login 成功时，res 包含 user_id（需确保服务层返回正确数据）
        # 示例：res 格式应为字典 → {"user_id": 1, "msg": "登录成功"}
        if isinstance(res, dict) and 'user_id' in res:
            user_id = res['user_id']
            # 构建响应对象
            response = make_response(return_response_(status, res['msg']))
            # 判断请求类型：若为 API 调用（通过请求头或路径识别），则设为 SameSite=None；否则设为 Lax
            is_api_request = request.path.startswith('/user/')  # 假设 API 路径以 /api/ 开头
            samesite = "None" if is_api_request else "Lax"

            # 设置 Cookie：user_id，关键配置如下
            response.set_cookie(
                key='user_id',  # Cookie 键名
                value=str(user_id),  # Cookie 值（转换为字符串，兼容所有类型）
                max_age=3600 * 24 * 7,  # 过期时间：7天（单位：秒），根据需求调整
                path='/',  # Cookie 生效路径（根路径，所有接口均可访问）
                httponly=True,  # 禁止前端 JS 访问（防止 XSS 攻击，重要！）
                # samesite='Lax'  # 防止 CSRF 攻击（Lax 兼容大部分场景）
                samesite=samesite,  # 支持纯 API 跨域携带
            )

            return response
        else:
            # 服务层返回格式异常处理
            return return_response_(False, "登录成功但数据格式异常，请联系管理员")
    return return_response_(status, res)


@user_bp.route('/register', methods=['GET', 'POST'])
def register():
    """
    先收集用户名和密码，到后面的相关信息再写对应接口。
    """
    username = request.json.get('username')
    password = request.json.get('password')
    # 生成随机数字
    email = str(random.randint(6, 10))
    status, res = user_services.register_user(username, email=email, password=password)
    return return_response_(status, res)
